package com.cmti.skeleton.dao.mapper;

import com.cmti.commons.util.StringUtils;
import com.cmti.skeleton.dto.SysRoleDto;
import com.cmti.skeleton.entity.SysRole;
import org.apache.ibatis.jdbc.SQL;

public class SysRoleSqlProvider {

    public String insertSelective(SysRole record) {
        SQL sql = new SQL();
        sql.INSERT_INTO("sys_role");

        if (record.getName() != null) {
            sql.VALUES("NAME", "#{name,jdbcType=VARCHAR}");
        }

        if (record.getStatus() != null) {
            sql.VALUES("STATUS", "#{status,jdbcType=INTEGER}");
        }

        if (record.getRemark() != null) {
            sql.VALUES("REMARK", "#{remark,jdbcType=VARCHAR}");
        }

        return sql.toString();
    }

    public String updateByPrimaryKeySelective(SysRole record) {
        SQL sql = new SQL();
        sql.UPDATE("sys_role");

        if (record.getName() != null) {
            sql.SET("NAME = #{name,jdbcType=VARCHAR}");
        }

        if (record.getStatus() != null) {
            sql.SET("STATUS = #{status,jdbcType=INTEGER}");
        }

        if (record.getRemark() != null) {
            sql.SET("REMARK = #{remark,jdbcType=VARCHAR}");
        }

        sql.WHERE("ID = #{id,jdbcType=BIGINT}");

        return sql.toString();
    }

    public String selectListByDto(SysRoleDto role) {
        SQL sql = new SQL();
        sql.SELECT("r.*").FROM("sys_role r").WHERE("r.ID<>1");

        // 角色名称
        if (StringUtils.isNotNull(role.getName())) {
            role.setName("%" + role.getName() + "%");
            sql.WHERE("r.NAME LIKE #{name}");
        }
        // 状态
        if (role.getStatus() != null) {
            sql.WHERE("r.STATUS= #{status}");
        }

        // 排序
        if (StringUtils.isNotNull(role.getSort()) && StringUtils.isNotNull(role.getOrder())) {
            sql.ORDER_BY(role.getSort() + " " + role.getOrder());
//            sql.ORDER_BY("${sort} ${order}");
        } else {
            //否则默认ID升序
            sql.ORDER_BY("r.ID ASC");
        }
        return sql.toString();
    }

}
